package com.zhongkai.app.service.impl;

import com.mysql.jdbc.StringUtils;
import com.zhongkai.Bean.PageBean;
import com.zhongkai.app.service.BigDataUnitServcie;
import com.zhongkai.app.service.IBaseDao;
import com.zhongkai.app.service.PageQuerDao;
import com.zhongkai.jedis.JedisClient;
import com.zhongkai.model.utils.TTHelp;
import com.zhongkai.model.utils.ZhongkaiResult;
import com.zhongkai.model3.Anomaly;
import com.zhongkai.model3.SetUnit;
import com.zhongkai.model3.UnitBigData;
import com.zhongkai.model3.Unlike;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional(rollbackFor = Exception.class)
public class BigDataUnitServcieImpl implements BigDataUnitServcie {
    @Autowired
    private IBaseDao iBaseDao;


    @Autowired
    private PageQuerDao pageQuerDao;

    @Autowired
    private JedisClient jedisClient;


    /**
     * 设备数据
     * <p>
     *
     * @param state                  //设备状态 从redis中获取  1 开机 2关机 3报警
     * @param signal//信号强度           从redis中获取
     * @param power//当前电压            从redis中获取
     * @param force//实时电量            从redis中获取
     * @param voltage_currente//实时电流 从redis中获取
     * @param power_all//总耗电量        从redis中获取
     * @param user_t                 //设备设定温度 从redis中获取
     * @param time                   //数据更新时间
     * @param user_water_r           //用户进水温度
     * @param user_water_s           //用户出水温度
     * @param user_stressr_r         //用户进水压力
     * @param user_stressr_s         //用户出水压力
     * @param ground_water_r         //地源进水温度
     * @param ground_water_s         //地源出水温度
     * @param ground_stressr_r       //地源进水压力
     * @param ground_stressr_s       //地源出水压力
     * @param unit_in                //压缩机吸气温度
     * @param unit_out               //压缩机排气温度
     * @param environment            //环境温度
     * @param supply_pressure        //补水压力
     * @param unit_uuid              // CPUID
     * @param warning                // 错误状态
     * @param warning_code           // 设备异常 代码
     */
    @Override
    public void addUnitData(
            String state //设备状态 从redis中获取  1 开机 2关机 3报警

            , String signal//信号强度 从redis中获取

            , String power//当前电压 从redis中获取

            , String force//实时电量 从redis中获取

            , String voltage_currente//实时电流 从redis中获取

            , String power_all//总耗电量 从redis中获取

            , String user_t //设备设定温度 从redis中获取

            , Long time //数据更新时间

            , String user_water_r //用户进水温度

            , String user_water_s //用户出水温度

            , String user_stressr_r //用户进水压力

            , String user_stressr_s //用户出水压力

            , String ground_water_r //地源进水温度

            , String ground_water_s //地源出水温度

            , String ground_stressr_r //地源进水压力

            , String ground_stressr_s //地源出水压力

            , String unit_in //压缩机吸气温度

            , String unit_out //压缩机排气温度

            , String environment //环境温度

            , String supply_pressure //补水压力

            , String unit_uuid // CPUID

            , String warning // 错误状态

            , String warning_code // 设备异常原因

            , String sys_stop // 设备异常原因 代码
            , String compressor // 设备异常原因 代码
            , String groundpump // 设备异常原因 代码
            , String sysopen_num // 设备异常原因 代码
            , String compreopen_num // 设备异常原因 代码
            , String locking // 设备异常原因 代码
    ) throws Exception {


        UnitBigData unitBigData = new UnitBigData();
        unitBigData.setBigState(Integer.valueOf(state));//开关机
        unitBigData.setBigSignal(signal); //信号强度
        unitBigData.setBigPower(power); //当前电压

        unitBigData.setBigForce(force);//实时电量

        unitBigData.setVoltageCurrente(voltage_currente);//实时电流

        unitBigData.setPowerAll(power_all);//总耗电量


        unitBigData.setUserT(Integer.valueOf(user_t)); //设备设定温度

        unitBigData.setBigTime(time);   //数据更新时间

        unitBigData.setUserWaterR(user_water_r); //用户进水温度

        unitBigData.setUserWaterS(user_water_s); //用户出水温度

        unitBigData.setUserStressrR(user_stressr_r); //用户进水压力

        unitBigData.setUserStressrS(user_stressr_s);//用户出水压力

        unitBigData.setGroundWaterR(ground_water_r); //地源进水温度

        unitBigData.setGroundWaterS(ground_water_s); //地源出水温度

        unitBigData.setGroundStressrR(ground_stressr_r); //地源进水压力

        unitBigData.setGroundStressrS(ground_stressr_s); //地源出水压力

        unitBigData.setUnitIn(unit_in);//压缩机吸气温度

        unitBigData.setUnitOut(unit_out);//压缩机排气温度

        unitBigData.setEnvironment(environment);//环境温度

        unitBigData.setSupplyPressure(supply_pressure);//补水压力

        unitBigData.setUnitUuid(unit_uuid);//CPUID

        unitBigData.setWarning(Integer.valueOf(warning));


        unitBigData.setSysStop(sys_stop);
        unitBigData.setCompressor(compressor);
        unitBigData.setGroundpump(groundpump);
        unitBigData.setSysopenNum(sysopen_num);
        unitBigData.setCompreopenNum(compreopen_num);
        unitBigData.setLocking(locking);
        //-----------------------------------------------------------


        iBaseDao.save(unitBigData);

        String s = jedisClient.get("IS_ERR".concat(unit_uuid));

        if ("1".equals(s)) {
            iBaseDao.update1("update SetUnit unit set unit.warning='" + warning+ "' where unit.setUuid='" + unit_uuid + "'");

           // Anomaly anomaly = (Anomaly) iBaseDao.get("from Anomaly se where se.setCard='" + uuid + "'"); //存入数据时查看此设备之前是否报警
            iBaseDao.update1("delete Anomaly se where se.setCard='" + unit_uuid + "'");

            jedisClient.set("IS_ERR".concat(unit_uuid),"0");
        }


        return;


}


    /**
     * 设备数据
     * <p>
     *
     * @param state                  //设备状态 从redis中获取  1 开机 2关机 3报警
     * @param signal//信号强度           从redis中获取
     * @param power//当前电压            从redis中获取
     * @param force//实时电量            从redis中获取
     * @param voltage_currente//实时电流 从redis中获取
     * @param power_all//总耗电量        从redis中获取
     * @param user_t                 //设备设定温度 从redis中获取
     * @param time                   //数据更新时间
     * @param user_water_r           //用户进水温度
     * @param user_water_s           //用户出水温度
     * @param user_stressr_r         //用户进水压力
     * @param user_stressr_s         //用户出水压力
     * @param ground_water_r         //地源进水温度
     * @param ground_water_s         //地源出水温度
     * @param ground_stressr_r       //地源进水压力
     * @param ground_stressr_s       //地源出水压力
     * @param unit_in                //压缩机吸气温度
     * @param unit_out               //压缩机排气温度
     * @param environment            //环境温度
     * @param supply_pressure        //补水压力
     * @param unit_uuid              // CPUID
     * @param warning                // 错误状态
     * @param warning_code           // 设备异常 代码
     * @param warning_cause          // 设备错误代码
     */

    @Override
    public void addErrorData(String state //设备状态 从redis中获取  1 开机 2关机 3报警


            , String signal//信号强度 从redis中获取

            , String power//当前电压 从redis中获取

            , String force//实时电量 从redis中获取

            , String voltage_currente//实时电流 从redis中获取

            , String power_all//总耗电量 从redis中获取

            , String user_t //设备设定温度 从redis中获取

            , Long time //数据更新时间

            , String user_water_r //用户进水温度

            , String user_water_s //用户出水温度

            , String user_stressr_r //用户进水压力

            , String user_stressr_s //用户出水压力

            , String ground_water_r //地源进水温度

            , String ground_water_s //地源出水温度

            , String ground_stressr_r //地源进水压力

            , String ground_stressr_s //地源出水压力

            , String unit_in //压缩机吸气温度

            , String unit_out //压缩机排气温度

            , String environment //环境温度

            , String supply_pressure //补水压力

            , String unit_uuid // CPUID

            , String warning // 错误状态

            , String warning_code // 设备错误代码

            , String warning_cause // 设备错误代码

            , String sys_stop // 设备异常原因 代码
            , String compressor // 设备异常原因 代码
            , String groundpump // 设备异常原因 代码
            , String sysopen_num // 设备异常原因 代码
            , String compreopen_num // 设备异常原因 代码
            , String locking // 设备异常原因 代码
    ) throws Exception {


        UnitBigData unitBigData = new UnitBigData();

        unitBigData.setBigState(Integer.valueOf(state));//开关机
        unitBigData.setBigSignal(signal); //信号强度
        unitBigData.setBigPower(power); //当前电压

        unitBigData.setBigForce(force);//实时电量

        unitBigData.setVoltageCurrente(voltage_currente);//实时电流

        unitBigData.setPowerAll(power_all);//总耗电量


        //Float v = Float.valueOf(user_t) * 10;
        unitBigData.setUserT(Integer.valueOf(user_t)); //设备设定温度

        unitBigData.setBigTime(time);   //数据更新时间

        unitBigData.setUserWaterR(user_water_r); //用户进水温度

        unitBigData.setUserWaterS(user_water_s); //用户出水温度

        unitBigData.setUserStressrR(user_stressr_r); //用户进水压力

        unitBigData.setUserStressrS(user_stressr_s);//用户出水压力

        unitBigData.setGroundWaterR(ground_water_r); //地源进水温度

        unitBigData.setGroundWaterS(ground_water_s); //地源出水温度

        unitBigData.setGroundStressrR(ground_stressr_r); //地源进水压力

        unitBigData.setGroundStressrS(ground_stressr_s); //地源出水压力

        unitBigData.setUnitIn(unit_in);//压缩机吸气温度

        unitBigData.setUnitOut(unit_out);//压缩机排气温度

        unitBigData.setEnvironment(environment);//环境温度

        unitBigData.setSupplyPressure(supply_pressure);//补水压力

        unitBigData.setUnitUuid(unit_uuid);//CPUID

        unitBigData.setWarning(Integer.valueOf(warning));

        unitBigData.setWarningCode(warning_code);

        unitBigData.setWarningCause(warning_cause);

        unitBigData.setSysStop(sys_stop);
        unitBigData.setCompressor(compressor);
        unitBigData.setGroundpump(groundpump);
        unitBigData.setSysopenNum(sysopen_num);
        unitBigData.setCompreopenNum(compreopen_num);
        unitBigData.setLocking(locking);


        iBaseDao.save(unitBigData);
        //-----------------------------------------------------------


        SetUnit setUnit = (SetUnit) iBaseDao.get("from SetUnit se where se.setUuid='" + unit_uuid + "'"); //uuid不存在 返回

        setUnit.setWarning(1);

        iBaseDao.update(setUnit);

        String[] split = warning_code.split(","); //错误代码
        String[] split1 = warning_cause.split(";"); //错误原因

        int att = split1.length;
        for (int i = 0; i < att; i++) {
            if (split[i] == "" || StringUtils.isNullOrEmpty(split[i])) {

            } else {
                Unlike unlike = new Unlike();

                unlike.setAddress(setUnit.getAppAddressAll());
                unlike.setSolveTime(time);
                unlike.setUnitUuid(unit_uuid);
                unlike.setWarCause(split1[i]); //错误原因
                unlike.setWarCode(split[i]); //错误代码

                unlike.setUserName(setUnit.getUserName());//用户姓名
                unlike.setUserPhone(setUnit.getUserPhone()); //手机号
                unlike.setUserUuid(setUnit.getUserUuid()); //用户uuid

                iBaseDao.save(unlike);

                unlike = null;
            }

        }


        if ("2".equals(setUnit.getSetBound())) {

            Anomaly anomaly = (Anomaly) iBaseDao.get("from Anomaly se where se.setCard='" + setUnit.getSetUuid() + "'");
            //   Anomaly anomaly = (Anomaly) iBaseDao.get("from Anomaly se where se.setCard='" + unit_uuid + "'");

            if (anomaly == null) {
                anomaly = new Anomaly();
                anomaly.setSetCard(unit_uuid);
                anomaly.setAnoTime(time);
                anomaly.setWarCause(warning_cause);
                anomaly.setState(state); //1开机 2关机
                anomaly.setUserName(setUnit.getUserName());
                anomaly.setUserPhone(setUnit.getUserPhone());
                anomaly.setAddress(setUnit.getAppAddressAll());
                anomaly.setSolve("1"); //1未解决 2已解决
                anomaly.setOrders("2");

                String uuid = TTHelp.generate();
                anomaly.setAnoId(uuid); //生成订单id

                iBaseDao.save(anomaly);
            } else {
                anomaly.setAnoTime(time);
                anomaly.setWarCause(warning_cause);
                iBaseDao.update(anomaly);
            }
        }


/*        String error_uuid = jedisClient.get(StringStatic.ERROR_UNIT);

        error_uuid = error_uuid + unit_uuid + ",";

        jedisClient.set(StringStatic.ERROR_UNIT, error_uuid);*/

        return;


    }

    @Override
    public void addErrorData2(String state, String signal, String power, String force, String voltage_currente, String power_all, String user_t, Long time, String user_water_r, String user_water_s, String user_stressr_r, String user_stressr_s, String ground_water_r, String ground_water_s, String ground_stressr_r, String ground_stressr_s, String unit_in, String unit_out, String environment, String supply_pressure, String unit_uuid, String warning, String warning_code, String warning_cause, String sys_stop, String compressor, String groundpump, String sysopen_num, String compreopen_num, String locking) throws Exception {

        UnitBigData unitBigData = new UnitBigData();

        unitBigData.setBigState(Integer.valueOf(state));//开关机
        unitBigData.setBigSignal(signal); //信号强度
        unitBigData.setBigPower(power); //当前电压

        unitBigData.setBigForce(force);//实时电量

        unitBigData.setVoltageCurrente(voltage_currente);//实时电流

        unitBigData.setPowerAll(power_all);//总耗电量


        //Float v = Float.valueOf(user_t) * 10;
        unitBigData.setUserT(Integer.valueOf(user_t)); //设备设定温度

        unitBigData.setBigTime(time);   //数据更新时间

        unitBigData.setUserWaterR(user_water_r); //用户进水温度

        unitBigData.setUserWaterS(user_water_s); //用户出水温度

        unitBigData.setUserStressrR(user_stressr_r); //用户进水压力

        unitBigData.setUserStressrS(user_stressr_s);//用户出水压力

        unitBigData.setGroundWaterR(ground_water_r); //地源进水温度

        unitBigData.setGroundWaterS(ground_water_s); //地源出水温度

        unitBigData.setGroundStressrR(ground_stressr_r); //地源进水压力

        unitBigData.setGroundStressrS(ground_stressr_s); //地源出水压力

        unitBigData.setUnitIn(unit_in);//压缩机吸气温度

        unitBigData.setUnitOut(unit_out);//压缩机排气温度

        unitBigData.setEnvironment(environment);//环境温度

        unitBigData.setSupplyPressure(supply_pressure);//补水压力

        unitBigData.setUnitUuid(unit_uuid);//CPUID

        unitBigData.setWarning(Integer.valueOf(warning));

        unitBigData.setWarningCode(warning_code);

        unitBigData.setWarningCause(warning_cause);

        unitBigData.setSysStop(sys_stop);
        unitBigData.setCompressor(compressor);
        unitBigData.setGroundpump(groundpump);
        unitBigData.setSysopenNum(sysopen_num);
        unitBigData.setCompreopenNum(compreopen_num);
        unitBigData.setLocking(locking);


        iBaseDao.save(unitBigData);
        //-----------------------------------------------------------

        SetUnit setUnit = (SetUnit) iBaseDao.get("from SetUnit se where se.setUuid='" + unit_uuid + "'"); //uuid不存在 返回

        setUnit.setWarning(1);

        iBaseDao.update(setUnit);

        String[] split = warning_code.split("#"); //错误代码
        String[] split1 = warning_cause.split(";"); //错误原因

        int att = split1.length;
        for (int i = 0; i < att; i++) {
            if (split[i] == "" || StringUtils.isNullOrEmpty(split[i])) {

            } else {
                Unlike unlike = new Unlike();

                unlike.setAddress(setUnit.getAppAddressAll());
                unlike.setSolveTime(time);
                unlike.setUnitUuid(unit_uuid);
                unlike.setWarCause(split1[i]); //错误原因
                unlike.setWarCode(split[i]); //错误代码

                unlike.setUserName(setUnit.getUserName());//用户姓名
                unlike.setUserPhone(setUnit.getUserPhone()); //手机号
                unlike.setUserUuid(setUnit.getUserUuid()); //用户uuid

                iBaseDao.save(unlike);

                unlike = null;
            }

        }


        if ("2".equals(setUnit.getSetBound())) {

            Anomaly anomaly = (Anomaly) iBaseDao.get("from Anomaly se where se.setCard='" + setUnit.getSetUuid() + "'");
            //   Anomaly anomaly = (Anomaly) iBaseDao.get("from Anomaly se where se.setCard='" + unit_uuid + "'");

            if (anomaly == null) {
                anomaly = new Anomaly();
                anomaly.setSetCard(unit_uuid);
                anomaly.setAnoTime(time);
                anomaly.setWarCause(warning_cause);
                anomaly.setState(state); //1开机 2关机
                anomaly.setUserName(setUnit.getUserName());
                anomaly.setUserPhone(setUnit.getUserPhone());
                anomaly.setAddress(setUnit.getAppAddressAll());
                anomaly.setSolve("1"); //1未解决 2已解决
                anomaly.setOrders("2");

                String uuid = TTHelp.generate();
                anomaly.setAnoId(uuid); //生成订单id

                iBaseDao.save(anomaly);
            } else {
                anomaly.setAnoTime(time);
                anomaly.setWarCause(warning_cause);
                iBaseDao.update(anomaly);
            }
        }

/*
        String error_uuid = jedisClient.get(StringStatic.ERROR_UNIT);

        error_uuid = error_uuid + unit_uuid + ",";

        jedisClient.set(StringStatic.ERROR_UNIT, error_uuid);*/

        return;
    }


    /**
     * 设备数据
     *
     * @param uuid    //设备id
     * @param status  //设备状态 从redis中获取  1 开机 2关机
     * @param battery //设备耗电总量 取小数点后一位数 例如87.5
     * @param warning //设备是否报警
     * @param energy  //设备是当前温度
     */
    @Override
    public void updateUnit(String uuid, String status, String battery, String warning, String energy) throws Exception {
        if (StringUtils.isNullOrEmpty(uuid)) {
            return;
        }

        // SetUnit setUnit;
        //SetUnit
     /*
        iBaseDao.update1("update SetUnit unit set unit.setStatus="+status+" unit.battery="+v+" unit.warning where unit.setUuid='"+uuid+"'");*/

        //Float v = Float.valueOf(battery) * 10; //把耗电量乘10存入数据库  保证为整数


/*        iBaseDao.update1("update SetUnit unit set unit.setStatus=" + status + " , unit.battery=" + v + " , unit.warning=" + warning + " , unit.energy=" + energy
                + " , unit.setIp='" + ip + "' where unit.setUuid='" + uuid + "'");*/

/*        iBaseDao.update1("update SetUnit unit set unit.setStatus=" + status + " , unit.battery=" + v + " , unit.warning=" + warning + " , unit.energy=" + energy
                + " where unit.setUuid='" + uuid + "'");*/
        //  SetUnit
/*        iBaseDao.update1("update SetUnit unit set unit.setStatus=" + status + " , unit.warning=" + warning + " , unit.energy=" + energy
                + " where unit.setUuid='" + uuid + "'");*/

        iBaseDao.update1("update SetUnit unit set unit.setStatus=" + status + " , unit.warning=" + warning
                + " where unit.setUuid='" + uuid + "'");

        Anomaly anomaly = (Anomaly) iBaseDao.get("from Anomaly se where se.setCard='" + uuid + "'"); //存入数据时查看此设备之前是否报警

        if (anomaly != null) { //之前有过报警

            if ("0".equals(warning)) { // 此时数据正常
                if ("1".equals(anomaly.getOrders())) {
                    return;
                }
                iBaseDao.delete(anomaly); //删除报警信息
            }
        }
/*        SetUnit setUnit = (SetUnit) iBaseDao.get("from SetUnit unit where unit.setUuid='" + uuid + "'");


        if (setUnit == null) {
            return;
        }



        setUnit.setSetStatus(Integer.valueOf(status)); //开关机

        setUnit.setBattery(v.longValue()); //总耗电量

        setUnit.setWarning(Integer.valueOf(warning)); //是否报警

        setUnit.setEnergy(Integer.valueOf(energy)); //设备当前温度
        iBaseDao.update(setUnit);*/
    }


    /**
     * 设备历史数据
     *
     * @param uuid   //设备id
     * @param status //1 当天内数据 2三天内数据 3一周数据
     * @param params //数据类型 折线图数据
     * @param val    //数据类型 折线图数据
     */
    @Override
    public ZhongkaiResult unitDate(String uuid, String status, String params, String val) {

        if (
                StringUtils.isNullOrEmpty(uuid) ||
                        StringUtils.isNullOrEmpty(status) ||
                        StringUtils.isNullOrEmpty(params)
                ) {
            return ZhongkaiResult.build(500, "数据不完整");
        }


        try {


            DateTime now = new DateTime();
            List<Object[]> list;
            long millis = now.dayOfWeek().roundCeilingCopy().getMillis();//明天00点的时间戳
            //UnitBigData
            // UnitBigData
            //  UnitBigData
            //UnitBigData
            // UnitBigData
            //UnitBigData
            switch (status) {
                case "1":
                    long floor = now.dayOfWeek().roundFloorCopy().getMillis();//今天00点的时间戳
                    if (StringUtils.isNullOrEmpty(val)) {
                        //UnitBigData
                        // list = iBaseDao.find("select " + params + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime<" + millis + "and se.bigTime>" + floor);
                        list = iBaseDao.find("select " + params + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime between " + floor + " and " + millis + " order by bigTime asc");
                    } else {
                        // list = iBaseDao.find("select " + params + "," + val + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime<" + millis + "and se.bigTime>" + floor);
                        list = iBaseDao.find("select " + params + "," + val + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime between " + floor + " and " + millis + " order by bigTime asc");
                    }


                    return ZhongkaiResult.ok(list);

                case "2":
                    long i = 86400000 * 3;

                    long il = millis - i;//三天前的信息

                    if (StringUtils.isNullOrEmpty(val)) {
                        //UnitBigData
                        //  list = iBaseDao.find("select " + params + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime<" + millis + "and se.bigTime>" + il);
                        list = iBaseDao.find("select " + params + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime between " + il + " and " + millis + " order by bigTime asc");
                    } else {
                        // list = iBaseDao.find("select " + params + "," + val + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime<" + millis + "and se.bigTime>" + il);
                        list = iBaseDao.find("select " + params + "," + val + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime between " + il + " and " + millis + " order by bigTime asc");
                    }


                    return ZhongkaiResult.ok(list);

                case "3":
                    long op = 86400000 * 7;

                    long ke = millis - op;//一周前的信息

                    if (StringUtils.isNullOrEmpty(val)) {
                        //UnitBigData
                        // list = iBaseDao.find("select " + params + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime<" + millis + "and se.bigTime>" + ke);
                        list = iBaseDao.find("select " + params + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime between " + ke + " and " + millis + " order by bigTime asc");
                    } else {
                        list = iBaseDao.find("select " + params + "," + val + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime between " + ke + " and " + millis + " order by bigTime asc");
                    }


                    return ZhongkaiResult.ok(list);

                default:
                    String[] split = status.split("-");

                    DateTime dt3 = new DateTime(Integer.parseInt(split[0]), Integer.parseInt(split[1]), Integer.parseInt(split[2]), 0, 0, 0, 0);
                    DateTime dt4 = new DateTime(Integer.parseInt(split[0]), Integer.parseInt(split[1]), Integer.parseInt(split[2]), 23, 59, 59, 59);
                    long millis1 = dt3.getMillis();
                    long millis2 = dt4.getMillis();
                    if (StringUtils.isNullOrEmpty(val)) {
                        //UnitBigData
                        // list = iBaseDao.find("select " + params + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime<" + millis + "and se.bigTime>" + ke);
                        list = iBaseDao.find("select " + params + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime between " + millis1 + " and " + millis2 + " order by bigTime asc");
                    } else {
                        list = iBaseDao.find("select " + params + "," + val + " , bigTime from UnitBigData se where se.unitUuid='" + uuid + "' and se.bigTime between " + millis1 + " and " + millis2 + " order by bigTime asc");
                    }

                    return ZhongkaiResult.ok(list);

            }


        } catch (Exception e) {
            e.printStackTrace();

            return ZhongkaiResult.build(400, "失败");
        }
    }


    /**
     * 历史数据
     *
     * @param uuid      //设备uuid
     * @param mess_time 内容 1 一小时  2 一天 3 一周
     */
    @Override
    public ZhongkaiResult messList(String mess_time, String uuid, Integer page, Integer rows) {
        if (
                StringUtils.isNullOrEmpty(uuid) ||

                        StringUtils.isNullOrEmpty(mess_time) || page == 0 || rows == 0
                ) {
            return ZhongkaiResult.build(500, "数据不完整");
        }

        try {


            DateTime now = new DateTime();
            long millis = now.dayOfWeek().roundCeilingCopy().getMillis();//明天00点的时间戳
            long floor = now.dayOfWeek().roundFloorCopy().getMillis();//今天00点的时间戳


            PageBean pageBean = new PageBean();
            pageBean.setCurrentPage(page);
            pageBean.setPageSize(rows);
            DetachedCriteria detachedCriteria = DetachedCriteria.forClass(UnitBigData.class);
            detachedCriteria.add(Restrictions.eq("unitUuid", uuid)); //增加条件 父用户uuid
            if (mess_time.equals("2")) { //一天
                detachedCriteria.add(Restrictions.between("bigTime", floor, millis)); //增加条件 父用户uuid

            } else if (mess_time.equals("3")) { //一周
                long op = 86400000 * 7;
                long ke = millis - op;//一周前的信息

                detachedCriteria.add(Restrictions.between("bigTime", ke, millis)); //增加条件 父用户uuid
            } else { //一小时前的信息

                long dqmillis = now.getMillis(); //获取当前系统时间戳


                long wp = dqmillis - 3600000;

                detachedCriteria.add(Restrictions.between("bigTime", wp, dqmillis)); //增加条件 父用户uuid
            }
            //detachedCriteria.addOrder(Order.desc("solveTime")); //根据传入的字段进行升序排序 100 99 ...
            pageBean.setDetachedCriteria(detachedCriteria);
            pageQuerDao.pageQuery(pageBean);
            return ZhongkaiResult.ok(pageBean);

        } catch (Exception e) {
            e.printStackTrace();
            return ZhongkaiResult.build(400, "失败");
        }

    }
}
